package com.suiwei.base;

import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * @author suiwei
 * @date 2023/5/14 22:15
 */
public class RegexDemo {

  @Test
  void test() {
    // 转意，\ ：表示转意，转意字符用于字符串中
    String a = "\t"; // \对t进行转移，把t转意成了tab
    String b = "\\d"; // \d会报错，必须用\\d：第一个\对第二个\转意，使得第二个\不再是转意字符，而变成普通反斜线
    String c = "home/demo/t"; // linux中使用/作为路径分隔符（浏览器也是使用/作为路径分隔符）
    String d = "D:\\demo\\t"; // windows中使用反斜线作路径分隔符；第一个反斜线把第二个反斜线转意成路径分隔符
    String e = "我的手机号是13105120203，你的手机号是15610491109，他的是13888888888";
    // 手机号
    String phoneRegex = "[1][3-9]\\d{9}";
    // 邮箱
    String emailRegex = "\\w+[@][\\w&&[^_]]+(\\.[a-z]{2,3})+";
    // 判断功能
    System.out.println("13105120203".matches(phoneRegex)); // true
    System.out.println("suiwei@gmail.com".matches(emailRegex)); // true
    // 分隔功能
    System.out.println(Arrays.toString(d.split("\\\\")));
    // 替换功能，支持正则
    System.out.println(d.replaceAll("\\\\", "*"));
    // 替换，不支持正则
    System.out.println(d.replace("\\", "*"));

    // 获取功能，从一大段字符文字中找出符合某种规则的数据
    // 将正则表达式封装成pattern对象
    Pattern pattern = Pattern.compile(phoneRegex);
    // 获取匹配器对象
    Matcher matcher = pattern.matcher(e);
    // 判断有没有；
    System.out.println(matcher.find()); // true
    // 必须先find再group，group不能单独使用；获取刚才find查找过的数据：多次调用返回的是同一个值
    System.out.println(matcher.group()); // 13105120203
    System.out.println(matcher.group()); // 13105120203
    while (matcher.find()) {
      System.out.println(matcher.group());
    }
  }
}
